<?php

namespace App\Models;

use Illuminate\Database\Eloquent\Factories\HasFactory;
use Illuminate\Database\Eloquent\Model;
use Illuminate\Database\Eloquent\SoftDeletes;
use Jedrzej\Pimpable\PimpableTrait;

class StoreCouponIssue extends Model
{
    use HasFactory;
    use PimpableTrait;
    use SoftDeletes;

    /**
     *领取方式
     */
    public $receiveType = [
        'receive_one' => '手动领取',
        'receive_two' => '新人券',
        'receive_three' => '赠送券',
        'receive_four' => '会员券',
        'receives_one' => '通用券',
        'receives_two' => '品类券',
        'receives_three' => '商品券',
    ];

    /**
     *可批量赋值的字段
     */
    public $fillable = [
        'cid',
        'product_id',
        'category_id',
        'coupon_title',
        'total_count',
        'remain_count',
        'full_reduction',
        'integral',
        'coupon_price',
        'use_min_price',
        'coupon_time',
        'limitquantity',
        'deleted_at',
        'receive_type',
        'type',
        'start_time',
        'end_time',
        'start_use_time',
        'end_use_time',
        'is_permanent',
        'status',
        'title',
        'sort',
        'system_admin_id'
    ];

    /**
     *可以模糊查询的字段
     */
    public $searchableModels = [
        'title' => '%field%',
    ];
    /**
     * 可搜索的字段
     */
    public $searchable = [
        'id',
        'code',
        'name',
        'account',
        'net_name',
        'deleted_at',
        'status',
        'coupon_title',
        'receive_type',
        'title'
    ];
    /**
     * 默认倒序排序
     */
    protected $defaultSortCriteria = ['id,desc'];


    /**
     * 获取使用门槛的方法
     */
    public function threshold($data)
    {
        if (empty($data->use_min_price)) {
            return 0;
        } else {
            return 1;
        }
    }

    /**
     * 使用时间
     */
    public function usagetime($data)
    {
        if (empty($data->coupon_time)) {
            return 1;
        } else {
            return 0;
        }
    }

    /**
     * 领取时间
     */
    public function collectiontime($data)
    {
        if (empty($data->start_time) || empty($data->end_time)) {
            return 1;
        } else {
            return 0;
        }

    }

    /**
     * 获取发布数量的方法
     */
    public function sum($data)
    {
        if ($data->is_permanent == 1) {
            return [
                'type' => 1,
                'release' => ['title' => '发布', 'num' => $data->limitquantity ?? 0],
                'surplus' => ['title' => '剩余', 'num' => $data->remain_count ?? 0],
            ];
        } else {
            return [
                'type' => 0,
                'unlimited' => ['title' => '不限量']
            ];
        }
    }

    /**
     * 获取领取时间的方法
     */
    public function collection_date($data)
    {
        if ($data->start_use_time && $data->end_use_time) {

            return $data->start_use_time . '-' . $data->end_use_time;
        } else {
            return '不限时';
        }
    }

    /**
     * 获取使用时间的方法
     */
    public function date_of_use($data)
    {
        if (!empty($data->start_time) && !empty($data->end_time)) {
            return $data->start_time . '-' . $data->end_time;
        } else {
            return $data->coupon_time . '天';
        }
    }

    /**
     * 优惠券所对应的领取的用户
     */
    public function users()
    {
        return $this->hasManyThrough(
            User::class,    //最终要关联的模型
            StoreCouponIssueUser::class,   //中间的模型
            'issue_coupon_id',   //中间模型和本模型关联的字段 (本模型的外键) 中间模型中的字段
            'id',   //最终关联模型的外键 最终关联的模型中的字段
            'id',     //本模型和中间模型关联的键  本模型中的字段
            'user_id'   // 中间模型和最终模型关联的外键中间模型的字段
        );
    }

    public function product()
    {
        return $this->hasOne(Product::class, 'id', 'product_id');
    }
}
